perm filename TBOX.FAI[CMS,LCS]3 blob
sn#347580 filedate 1978-04-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00005 00003 INPUT WAIT
C00007 00004 Update LEDs
C00008 00005 Bit spreading table
C00010 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
CMD ← 1 ↔ N ← 2 ↔ T ← 3
SW0 ← 4 ↔ SW1 ← 5 ↔ SW2 ← 6 ↔ AD ← 7
XTAL ← =5000000
BRATE ← =9600 ;Baud rate
TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
LDEF ← 7
ROW0 ← 357 ↔ ROW1 ← 337
SBITS ← 60
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
ERROR: DISTI ;TIMER INT VECTOR
RETR
RST: MOVI 377 ;SETUP INPUT PORTS
OUTB
OUTP 1
OUTP 2
MOVI LDEF ;SETUP LED DEFAULT
CALL OLED
CLRA ;Setup timer
MOVAT
STRTT
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,4 ;4 = 96 ms
CLRF0 ;Set scan flag
CPLF0
;INPUT WAIT
OFFSET ← TBIT/2
CLRIT: CLRA ;Zero input byte
INWAI: JTF UPFLG ;CHECK IF TIMER TIME OUT
CKIN: JT0H INWAI ;CHECK FOR START BIT
MOVRI N,OFFSET-4
CENTER: DJNZ N,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
MOVRI CMD,11 ;# of bits -1
ILOOP: CALL IWAI
DJNZ CMD,ILOOP
ROLC ;Shift out stop bit
JCC CLRIT ;Check for good stop bit.
CALL OLED ;Update leds
JF0S SCAN ;Check if time to scan.
; Output switches
OSWTCH: MOVRA SW0
CALL OBYTE
MOVRA SW1
CALL OBYTE
MOVRA SW2
CALL OBYTE
MOVRA AD
CALL OBYTE
JMP CLRIT
IWAI: MOVRI N,TBIT-6
WAI: DJNZ N,WAI
CLRC
JT0H BITON
NOP
RORC
RET
BITON: CPLC
RORC
RET
;Update LEDs
OLED: ANI 357
RORC ;Get cal led
MOVAR CMD ;Save mode
MOVI 377
CLRL: OUTB ;Clear led loop
DECA
JBS 3,CLRL
JCC OMODE ;Set cal?
MOVI 367
OUTB
OMODE: MOVRA CMD
OUTB ;Write mode led.
RET
; Output Acc. to SI/O line
OBYTE: MOVRI CMD,11 ;# of bits -1
CLRC
ROLC ;Start bit
OLOOP: OUTP 1 ;Output bit
RORC
MOVRI N,TBIT-3
OWAIT: DJNZ N,OWAIT
DJNZ CMD,OLOOP
ORPI 1,377 ;Stop bit
MOVRI N,TBIT-7
SWAIT: DJNZ N,SWAIT
NOP
RET
; Bit spreading table
LOC 474
0 ↔ 1 ↔ 4 ↔ 5 ↔ 20 ↔ 21 ↔ 24 ↔ 25
100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
SCAN: CLRF0 ;Reset scan flag
ORBI SBITS ;Turn off rows
ANBI ROW0
INP 1 ;Scan row 0
CPLA
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPA ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPA
MOVAR SW1
ORBI SBITS
ANBI ROW1
INP 1 ;Scan row 1
CPLA
ANI 17 ;Low nibble
MOVPA
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
INP 1 ;Scan row 1 again
CPLA
SWAP
ANI 17
MOVPA
ROL
ORR SW1
MOVAR SW1
INP 2 ;Get push buttons
CPLA
MOVAR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
CLRA
JT1H ADZRO
INB
JNZ ADZRO ;Force AD to be non zero
INCA
ADZRO: MOVAR AD
JMP OSWTCH
LOC 2272
0 ;This is for a block of zeros
END